package com.youdianstar.app.entity

/**
 * File: NewOrderInfo
 * Author: Assistant Create: 2024/12/19
 * Changes (from 2024/12/19)
 * --------------------------------------------------
 * description: 新订单数据结构，匹配sw/app/rentbox/order/list.html/V2接口
 * ---------------------------------------------------
 *
 */
data class NewOrderInfo(
    val id: Int,                    // 订单ID
    val uuid: String,               // 订单UUID
    val uid: Int,                   // 用户ID
    val box1Id: Int,                // 机柜1ID
    val box1ProductId: Int,          // 机柜1产品ID
    val box1AgencyId: String,          // 机柜1代理商ID
    val box1DeviceId: String,          // 机柜1设备ID
    val box1DeviceUuid: String,      // 机柜1设备UUID
    val box1SiteId: String,            // 机柜1站点ID
    val box1SiteName: String,       // 机柜1站点名称
    val box2Id: String,                // 机柜2ID
    val box2ProductId: String,         // 机柜2产品ID
    val box2AgencyId: String,          // 机柜2代理商ID
    val box2DeviceId: String,          // 机柜2设备ID
    val box2DeviceUuid: String,     // 机柜2设备UUID
    val box2SiteId: String,            // 机柜2站点ID
    val box2SiteName: String,       // 机柜2站点名称
    val singleId: String,              // 充电宝ID
    val singleProductId: String,       // 充电宝产品ID
    val singleAgencyId: String,        // 充电宝代理商ID
    val singleDeviceId: String,       // 充电宝设备ID
    val singleDeviceUuid: String,  // 充电宝设备UUID
    val includedFreeTime: Boolean,  // 是否包含免费时间
    val ruleMinuteFree: Int,        // 免费分钟数
    val ruleMinuteCycle: Int,       // 周期分钟数
    val ruleCycleFee: Double,       // 周期费用
    val ruleDayFee: Double,         // 日费用
    val ruleSecurityFee: Double,    // 押金费用
    val ruleSecurityHqFee: Double,  // 总部押金费用
    val ruleSecurityBoxFee: Double, // 机柜押金费用
    val ruleSecuritySingleFee: Double, // 充电宝押金费用
    val fee: Double,                // 费用
    val couponId: String,              // 优惠券ID
    val couponName: String,         // 优惠券名称
    val couponSubsidy: Int,         // 优惠券补贴
    val couponTime: Int,            // 优惠券时间
    val couponFee: Int,             // 优惠券费用
    val delayedStartTime: String?,   // 延迟开始时间
    val delayedEndTime: String?,     // 延迟结束时间
    val payFee: Double,             // 支付费用
    val currencyFee: Double,        // 货币费用
    val platformFee: Double,        // 平台费用
    val payWay: String,             // 支付方式
    val commissionFee: Double,      // 佣金费用
    val commisson: Boolean,         // 是否佣金
    val usingStatus: Int,           // 使用状态: 1:使用中, 2:已归还, 3:已购买(正常), 4:已购买(丢失), 5:已购买(超时), 6:其他状态
    val usingSecound: Int,          // 使用秒数
    val pay: Boolean,               // 是否已支付
    val manual: Boolean,           // 是否手动
    val manualUid: String,            // 手动用户ID
    val failureId: Int,            // 失败ID
    val securityOrderId: String,      // 押金订单ID
    val securityFee: Double,       // 押金费用
    val security: Boolean,         // 是否押金
    val createTime: Long,           // 创建时间
    val borrowTime: Long,           // 租借时间
    val returnTime: Long,           // 归还时间
    val payTime: Long,              // 支付时间
    val refundTime: String?,        // 退款时间
    val refundStatus: Int,          // 退款状态
    val auditUid: String,              // 审核用户ID
    val endTime: Long,              // 结束时间
    val updateTime: Long,           // 更新时间
    val del: Boolean,              // 是否删除
    val ruleMinuteLatestPay: Int,   // 最晚支付分钟数
    val latestPayTime: Long,        // 最晚支付时间
    val latestPay: Boolean,         // 是否最晚支付
    val check: Boolean,            // 是否检查
    val checkTime: Long,           // 检查时间
    val nickName: String,           // 昵称
    val payUuid: String,           // 支付UUID
    val box1BusinessUid: String,     // 机柜1商户用户ID
    val box1StaffUid: String,        // 机柜1员工用户ID
    val box1ReferrerUid: String,     // 机柜1推荐用户ID
    val refundAllFee: Double,     // 全部退款费用
    val stealStatus: Int,         // 偷盗状态
    val fistMinute: Int,           // 首分钟
    val fistMinuteFee: Double,     // 首分钟费用
    val buyTime: String?,          // 购买时间
    val stealStatusAdmin: Int,     // 管理员偷盗状态
    val singleBank: Int,           // 充电宝银行
    val orderMark: Int,            // 订单标记
    val offerType: Int,            // 优惠类型
    val rentalElectricity: Int,    // 租借电量
    val returnElectricity: Int,    // 归还电量
    val uuidLastSix: String,       // UUID后六位
    val royaltiesId: String,         // 版税ID
    val compensate: Double,       // 补偿
    val amountOfCredit: Double,   // 信用额度
    val pushStatus: Int,          // 推送状态
    val powerBankType: Int,       // 充电宝类型
    val hidden: Int,              // 隐藏状态
    val rentStatus: Int           // 租借状态
) {
    /**
     * 获取订单状态文本
     */
    fun getStatusText(): String {
        return when (usingStatus) {
            1 -> "使用中"
            2 -> "已归还"
            3 -> "已购买"
            4 -> "已购买(丢失)"
            5 -> "已购买(超时)"
            6 -> "其他状态"
            else -> "未知状态"
        }
    }
    
    /**
     * 获取状态颜色
     */
    fun getStatusColor(): String {
        return when (usingStatus) {
            1 -> "#FFD700"  // 使用中 - 金色
            2 -> "#FF6B6B"  // 已归还 - 红色
            3 -> "#4ECDC4"  // 已购买(正常) - 青色
            4 -> "#FF6B35"  // 已购买(丢失) - 橙色
            5 -> "#9B59B6"  // 已购买(超时) - 紫色
            6 -> "#95A5A6"  // 其他状态 - 灰色
            else -> "#666"  // 默认灰色
        }
    }
    
    /**
     * 是否需要支付
     */
    fun needPayment(): Boolean {
        return usingStatus == 2 && !pay
    }
    
    /**
     * 获取计费规则文本
     */
    fun getBillingRuleText(): String {
        return "前${ruleMinuteFree}分钟免费, ${ruleCycleFee}₫/${ruleMinuteCycle}分钟, ${ruleDayFee}₫/24小时"
    }
    
    /**
     * 获取租借地址
     */
    fun getRentAddress(): String {
        return box1SiteName.ifEmpty { "未知地址" }
    }
    
    /**
     * 获取设备UUID
     */
    fun getDeviceUuid(): String {
        return box1DeviceUuid.ifEmpty { "未知设备" }
    }
    
    /**
     * 获取使用时长文本
     */
    fun getDurationText(): String {
        val minutes = usingSecound / 60
        val seconds = usingSecound % 60
        return if (minutes > 0) {
            "${minutes}分${seconds}秒"
        } else {
            "${seconds}秒"
        }
    }
}
